"""author: wenyao
   data: 2021/5/8
   project: devopscmdb
"""
#属性 ：对象的描述信息
#静态属性  -- 类属性
#普通属性  -- 实例属性

#方法
#实例方法
#静态方法
#类方法

class ATM():
    name = "ATM"
    def __init__(self):
        self.country = "china"

    #普通（实例）方法
    def normal_mathod(self,name):
        print("normal:")
        print(self.name, name)
        # self.class_method("name111111")
        # self.static_method("name22222")

    #类方法
    @classmethod
    def class_method(cls,name):
        print("classmethod:")
        print(type(cls),cls)
        print(cls.name, name)

    #静态方法
    @staticmethod
    def static_method(name):
        print("static_method:")
        print(ATM.name, name)

a1 = ATM()

# #######实例调用  类方法，实例方法，静态方法都能通过实例去调用
a1.normal_mathod("normalmethod")
# a1.class_method("classmethod")
# a1.static_method("staticmethod")

#可以通过类名去调用 类方法和静态方法
#通过类名调用实例方法，需要传入一个实例对象
# ATM.normal_mathod(a1, "normal_method")
# ATM.class_method("classmethod")
# ATM.static_method("static_method")

#访问属性的区别
#传入参数的区别
#定义上的区别

#总结：
# 1、实例方法
#    只能通过实例对象调用， 类对象调用的话，需要传递实例作为参数。
#    实例方法内容通过 self.属性名的方式去访问实例属性和类属性,静态方法
# #    使用对象调用实例方法是，第一参数可以不用传，代表实例本身
# #2、类方法
#     可以通过类去调用也可以通过实例去调用
#     第一参数代表类本身，可以不用传
#     可以通过cls.属性名的方式去访问类属性
#     要用@classmethod装饰
# #3、静态方法
#     可以通过实例对象，类名去调用 。
#     每个参数必须传递
#     方法内部通过  类名.属性名的方式 访问类属性
#     要用@staticmethod装饰


